home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / progsrc / micropcx / micropcx.asm < prev    next >
Assembly Source File  |  1994-11-23  |  3KB  |  140 lines

  1. ; FILE: MICROPCX.ASM 
  2. ; DESCRIPTION: a PCX µviewer. 
  3. ; HARDWARE REQUIREMENTS: PC compatible & VGA. 
  4. ;              Power supply strongly recommended.
  5. ;
  6. ; This µviewer displays only 320x200x256 pcx files, but it is the shortest
  7. ; pcx viewer in the whole fuckin' world (185 bytes .com executable included).
  8. ; Warning: If this pro does not work with a certain 320x200x256 pcx, it may be
  9. ; caused by that one byte before palette data at the end of that pcx file. I do
  10. ; not know what this byte means, so I just skip it. And it makes my viewer a
  11. ; bit shorter :). If you find a 320x200x256 pcx which this program doesn't
  12. ; work with, or if you know how to interpret this mysterious byte, report via
  13. ; email to: mgoleb@iec.tup.edu.pl
  14. ; Copying policy: this is Public Domain so you can use it, and copy it,
  15. ; as long as you wish. I am not responsible for any damages caused by
  16. ; using this program.
  17. ; Admire, enjoy and learn! :-)
  18. ; Try to beat me & make a shorter one, if you dare!
  19. ; Greets go to Mike, Andrew, Melon, Tommy J. aka Modul, and Demonews magazine 
  20. ; editors!
  21. ; (C) 1994 by Lord Debugger. Poznan, Poland.
  22. ;
  23. ; P.S. The code is not documented because:
  24. ;    1.) IMHO it is selfdocumenting :)
  25. ;    2.) If it was hard to write, it should be hard to read :) (that is not
  26. ;        my idea, but I like it)
  27. ; C ya on the Net and have a nice os, guys!
  28.  
  29. cseg SEGMENT PARA PUBLIC 'CODE'
  30.  
  31. ASSUME cs:cseg, ds:cseg
  32.  
  33.     org    100H
  34. Start:
  35.     xor    ax, ax
  36.     mov    al, [byte ptr es:80h]
  37.     inc    al
  38.     mov    bx, 80h
  39.     add    bx, ax
  40.     mov    byte ptr [es:bx], 0
  41.     mov    ax, 0013h
  42.     int    10h
  43.     mov    ax, 3D00H
  44.     mov    dx, 82h
  45.     int    21H
  46.     mov    fhand, ax
  47.  
  48.     mov    di, 128
  49. move128:
  50.     call    getbyte
  51.     dec    di
  52.     jnz    move128
  53.  
  54.     mov    bx, 0A000h
  55.     mov    es, bx
  56.     xor    di, di
  57. ldlp1:
  58.     call    getbyte
  59.     and    ax, 0C0h
  60.     cmp    ax, 0C0h
  61.     jne    single
  62.     mov    al, bufor
  63.     and    ax, 3Fh
  64.     push    ax
  65.     call    getbyte
  66.     pop    cx
  67. ldlp2:  rep stosb
  68.     jmp    short cnt
  69. single:
  70.     mov    al, bufor
  71.     stosb
  72. cnt:
  73.     cmp    di, 64001
  74.     jb    ldlp1
  75.  
  76.     mov    cx, 768
  77.     push    di
  78. lpal:
  79.     push    cx
  80.     call    getbyte
  81.     stosb
  82.     pop    cx
  83.     loop    lpal
  84.     pop    di
  85.  
  86.     push    ds
  87.     push    es
  88.     pop    ds
  89.     mov    dx, di    
  90.     mov    si, di
  91.     mov    cx, 768
  92. set256:
  93.     lodsb
  94.     shr    al, 1
  95.     shr    al, 1
  96.     stosb
  97.     loop    set256
  98.     pop    ds
  99.     mov    ax, 1012h
  100.     xor    bx, bx
  101.     mov    cx, 256
  102.     int    10h
  103.  
  104.     mov    ah, 3Eh
  105.     mov    bx, fhand
  106.     int    21h
  107.  
  108.     mov    ax, 0C06H
  109.     mov    dx, 00FFH
  110.     int    21H
  111. lpwk:
  112.     mov    ax, 0600H
  113.     mov    dx, 00FFH
  114.     int    21H
  115.     jz    lpwk
  116.     mov    ax, 0C06H
  117.     mov    dx, 00FFH
  118.     int    21H
  119.  
  120.     mov    ax, 0003h
  121.     int    10h
  122.     ret
  123.  
  124. getbyte PROC NEAR
  125.     mov    ah, 3Fh
  126.     mov    bx, fhand
  127.     mov    cx, 1
  128.     lea    dx, bufor
  129.     int    21h
  130.     mov    al, bufor
  131.     ret
  132. getbyte ENDP
  133.  
  134. fhand    dw    ?
  135. bufor    db    ?
  136.  
  137. cseg ENDS
  138.  
  139. END Start
  140.